package student;

import Management.ExcelUtil;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/*定义学生表
开始excel操作
工作薄
获取第一个sheet页
获取单元格
添加单元格数据
建立表Sno
建立表Sname
建立表Sdate
建立表Sex
建立表Sgrade
建立表Career
添加列
返回
* */

/**
 * public class是JAVA定义的，
 * 一般占到编程的角度来将就是包含main方法的，
 * 一个java文件中。
 * Java是一门面向对象编程语言，
 * 不仅吸收了C++语言的各种优点，
 * 还摒弃了C++里难以理解的多继承、指针等概念，
 * 因此Java语言具有功能强大和简单易用两个特征。
 * Java语言作为静态面向对象编程语言的代表，
 * 极好地实现了面向对象理论，
 * 允许程序员以优雅的思维方式进行复杂的编程。
 */
public class StudentExcel {
    //定义学生表
    public ArrayList<StudentPojo> readStudentInfo(File file) {
        {
            // 开始excel操作
            ArrayList<StudentPojo> slist = new ArrayList<>();
            // 工作薄
            XSSFWorkbook wb = null;
            try {
                wb = new XSSFWorkbook(file);
                // 获取第一个sheet页
                XSSFSheet sheet1 = wb.getSheetAt(0);

                for (int i = 1; i <= sheet1.getLastRowNum(); i++) {
                    // 获取单元格
                    XSSFRow row = sheet1.getRow(i);
                    XSSFCell cell1 = row.getCell(0);
                    //0添加到单元格
                    XSSFCell cell2 = row.getCell(1);
                    //1添加到单元格
                    XSSFCell cell3 = row.getCell(2);
                    //2添加到单元格
                    XSSFCell cell4 = row.getCell(3);
                    //3添加到单元格
                    XSSFCell cell5 = row.getCell(4);
                    //4添加到单元格
                    XSSFCell cell6 = row.getCell(5);
                    //5添加到单元格
//                                                          System.out.println(cell1.getStringCellValue());
//                                                            System.out.println(cell2.getStringCellValue());
                    StudentPojo pojo = new StudentPojo();

                    pojo.setSno(cell1.getStringCellValue().toString());
                    //建立表Sno
                    pojo.setSname(cell2.getStringCellValue().toString());
                    //建立表Sname


//

                    pojo.setSdate(ExcelUtil.getStringCellValue(cell3));
                    //建立表Sdate
                    pojo.setSex(cell4.getStringCellValue().toString());
                    //建立表Sex

                    cell5.setCellType(CellType.STRING);
//                    System.out.println(ExcelUtil.getStringCellValue(cell5));

                    pojo.setSgrade(Integer.parseInt(cell5.getStringCellValue().toString()));
                    //建立表Sgrade
                    pojo.setCareer(cell6.getStringCellValue().toString());
                    //建立表Career
                    slist.add(pojo);
                    //添加列
                }

                wb.close();
                //关闭
            } catch (IOException e) {
                e.printStackTrace();
                //打印栈
            } catch (InvalidFormatException e) {
                e.printStackTrace();
                //打印栈
            }

            return slist;
            //返回列
        }
    }
    /*定义学生表
    开始excel操作
    工作薄
    获取第一个sheet页
    获取单元格
    添加单元格数据
    组装表头
    学号添加到单元
    姓名添加到单元
    出生日期添加到单元
    性别添加到单元
    成绩添加到单元
    专业添加到单元
    班号添加到单元
    列添加到学生表
    获取单元格
    返回
    * */
    public void exportto(String filepath, List<StudentPojo> slist) throws IOException {
        //定义学生列
/**
 * public:表示的这个程序的访问权限，
 * 表示的是任何的场合可以被引用，
 * 这样java虚拟机就可以找main()方法，
 * 从而来运行java程序
 * static:表明方法是静态的，
 * 不依赖类的对象的，是属于类的，
 * 在类加载的时候main()方法也随着加载到内存中去
 * void:main()方法是不需要返回值的
 * main：约定俗成，规定的
 * String[] args:从控制台接收参数
 * Java是一门面向对象编程语言，
 * 不仅吸收了C++语言的各种优点，
 * 还摒弃了C++里难以理解的多继承、指针等概念。
 */
        File file = new File(filepath);
        FileOutputStream out = new FileOutputStream(file);
        // 工作薄
        XSSFWorkbook wb = null;
        //获取空值
        wb = new XSSFWorkbook();
        // 获取第一个sheet页
        XSSFSheet sheet1 = wb.createSheet("学生表");

        // 组装表头
        XSSFRow row = sheet1.createRow(0);
        XSSFCell cell1 = row.createCell(0);
        XSSFCell cell2 = row.createCell(1);
        XSSFCell cell3 = row.createCell(2);
        XSSFCell cell4 = row.createCell(3);
        XSSFCell cell5 = row.createCell(4);
        XSSFCell cell6 = row.createCell(5);
        XSSFCell cell7 = row.createCell(6);
        /*0添加到单元
        * 1添加到单元
        * 2添加到单元
        * 3添加到单元
        * 4添加到单元
        * 5添加到单元
        * 6添加到单元
        * */
        cell1.setCellValue("学号");
        cell2.setCellValue("姓名");
        cell3.setCellValue("出生日期");
        cell4.setCellValue("性别");
        cell5.setCellValue("成绩");
        cell6.setCellValue("专业");
        cell7.setCellValue("班号");
        /*学号添加到单元
        * 姓名添加到单元
        * 出生日期添加到单元
        * 性别添加到单元
        * 成绩添加到单元
        * 专业添加到单元
        * 班号添加到单元
        * */
        // 组装表主体
        for (int i = 0; i < slist.size(); i++) {
            //for 循环
            StudentPojo item = slist.get(i);
            //列添加到学生表

            XSSFRow newrow = sheet1.createRow(i + 1);
            XSSFCell newcell1 = newrow.createCell(0);
            XSSFCell newcell2 = newrow.createCell(1);
            XSSFCell newcell3 = newrow.createCell(2);
            XSSFCell newcell4 = newrow.createCell(3);
            XSSFCell newcell5 = newrow.createCell(4);
            XSSFCell newcell6 = newrow.createCell(5);
            XSSFCell newcell7 = newrow.createCell(6);
            /*0添加到新单元
             * 1添加到新单元
             * 2添加到新单元
             * 3添加到新单元
             * 4添加到新单元
             * 5添加到新单元
             * 6添加到新单元
             * */
            newcell1.setCellValue(item.getSno());
            newcell2.setCellValue(item.getSname());
            newcell3.setCellValue(item.getSdate());
            newcell4.setCellValue(item.getSex());
            newcell5.setCellValue(item.getSgrade());
            newcell6.setCellValue(item.getCareer());
            newcell7.setCellValue(item.getCid());
            /*学号添加到单元
             * 姓名添加到单元
             * 出生日期添加到单元
             * 性别添加到单元
             * 成绩添加到单元
             * 专业添加到单元
             * 班号添加到单元
             * */
        }
        // 获取单元格


        wb.write(out); // 文件和  内存wb绑定
        out.close();
        wb.close();
        //结束
    }
}
